package school;

import java.util.ArrayList;
import java.util.List;

// 子类Student：继承Person，保留实验二特有属性与方法，补充super()调用
public class Student extends Person {
    private int grade;                      // 实验二原有：年级
    private String major;                   // 实验二原有：专业
    private List<Course> selectedCourses;   // 实验二原有：已选课程列表

    // 子类构造方法：通过super()调用Person父类构造方法，初始化共性属性
    public Student(int studentId, String name, String gender, int grade, String major) {
        super(studentId, name, gender);  // 调用父类构造：初始化id（学号）、name、gender
        this.grade = grade;              // 子类特有属性初始化（实验二原有）
        this.major = major;
        this.selectedCourses = new ArrayList<>();
    }

    // 实验二原有：选课方法（保留逻辑，仅优化输出格式）
    public void selectCourse(Course course) {
        if (!selectedCourses.contains(course)) {
            selectedCourses.add(course);
            System.out.println("[" + grade + "年级" + major + "专业]学生" + super.name +
                    "成功选择了《" + course.getCourseName() + "》（学分：" + course.getCredits() + "）");
        } else {
            System.out.println("学生" + super.name + "已选过《" + course.getCourseName() + "》，无法重复选择");
        }
    }

    // 实验二原有：退课方法（保留逻辑）
    public void dropCourse(Course course) {
        if (selectedCourses.contains(course)) {
            selectedCourses.remove(course);
            System.out.println("[" + grade + "年级" + major + "专业]学生" + super.name +
                    "成功退选了《" + course.getCourseName() + "》");
        } else {
            System.out.println("学生" + super.name + "未选过《" + course.getCourseName() + "》，无法退选");
        }
    }

    // 重写父类方法：打印工作单→学生课表（替代实验二的printTimetable()，符合实验要求）
    @Override
    public void printWorksheet() {
        System.out.println("\n[" + grade + "年级" + major + "专业]学生" + super.name + "（学号：" + super.id + "）的课表：");
        if (selectedCourses.isEmpty()) {
            System.out.println("暂无选课记录");
            return;
        }

        double totalCredits = 0;
        for (Course course : selectedCourses) {
            System.out.println("课程编号：" + course.getCourseId() +
                    "，课程名称：" + course.getCourseName() +
                    "，学分：" + course.getCredits() +
                    "，时间：" + course.getTime() +
                    "，地点：" + course.getLocation() +
                    "，授课教师：" + course.getTeacher().getName() +
                    "（联系电话：" + course.getTeacher().getPhoneNumber() + "）");
            totalCredits += course.getCredits();
        }
        System.out.println("已选课程总学分：" + totalCredits);
    }

    // 实验二原有：Getter方法（保留，供测试类访问）
    public int getGrade() {
        return grade;
    }

    public String getMajor() {
        return major;
    }

    public List<Course> getSelectedCourses() {
        return selectedCourses;
    }
}
